1 : <?php
2 :
3 :
4 : /*--------------------------------------------------------------------------+
5 : This file is part of eStudy.
6 : admin/classes/class.XmlImport.inc.php
7 : - Modulgruppe: Portal-Administration
8 : - Beschreibung: Dieses Modul behandelt "XML-File"
9 : - Version: 0.1, 24/07/07
10 : - Autor(en): Christian Ketter <christian.ketter@mni.fh-giessen.de>
11 : +---------------------------------------------------------------------------+
12 : This program is free software; you can redistribute it and/or
13 : modify it under the terms of the GNU General Public License
14 : as published by the Free Software Foundation; either version 2
15 : of the License, or any later version.
16 : +---------------------------------------------------------------------------+
17 : This program is distributed in the hope that it will be useful,
18 : but WITHOUT ANY WARRANTY; without even the implied warranty of
19 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 : GNU General Public License for more details.
21 : You should have received a copy of the GNU General Public License
22 : along with this program; if not, write to the Free Software
23 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
24 : +--------------------------------------------------------------------------*/
25 : /**
26 : * In dieser Datei wird die Klasse "XmlFile" implementiert.
27 : * @package eStudy.admin
28 : * * @author Christian Ketter <christian.ketter@mni.fh-giessen.de>
29 : * @version 0.2, 12/03/08
30 : */
31 :
32 1 : class XmlFile {
33 : public $modul_ID; //DB-interne ID
34 : public $studiengang;
35 : public $modulkuerzel;
36 : public $modultitel;
37 : public $lernziele;
38 : public $lerninhalt;
39 : public $modultyp;
40 : public $lehrformen;
41 : public $literatur;
42 : public $creditpoints;
43 : public $voraussetzungen;
44 : public $kurzbeschreibung;
45 :
46 : function XmlFile($file = false) {
47 : //Wenn kein path angegeben ist, werden keine Daten aus einer XML-Datei importiert
48 0 : if (!$file)
49 0 : return;
50 :
51 0 : if (file_exists($file)){
52 0 : $modul = simplexml_load_file($file);
53 0 : $dom = new DOMDocument();
54 0 : $geladen = $dom->load($file);
55 : //$xp = new DOMXPath($dom);
56 0 : $lerninhalt_raw = $dom->getElementsByTagName('lerninhalt');
57 0 : $lernziel_raw = $dom->getElementsByTagName('lernziel');
58 :
59 0 : if ($this->modulkuerzel == "wk2115"){
60 : // var_dump($entries->item(0)->nodeValue);
61 0 : }
62 0 : }
63 : else
64 0 : die($file . " kann nicht gefunden werden!");
65 :
66 0 : $this->modulkuerzel = $modul["nr"];
67 0 : $this->creditpoints = $modul["lp"];
68 :
69 0 : foreach ($modul->modulinhalt as $name) {
70 : //var_dump($name);
71 0 : $this->modultitel = $name->modultitel[0];
72 :
73 0 : foreach ($modul->modulinhalt->studiengang as $name)
74 0 : $this->studiengang .= $name . ", ";
75 0 : if (strlen($this->studiengang) > 0)
76 0 : $this->studiengang = substr($this->studiengang, 0, strlen($this->studiengang) - 2); //Letztes Komma entfernen
77 : else
78 0 : $this->studiengang = "n.a.";
79 :
80 0 : $this->lehrformen = "[list]"; // BB-Code
81 0 : foreach ($modul->modulinhalt->lernform->children() as $name => $wert)
82 0 : $this->lehrformen .= "[*]".ucfirst($name) . ": " . $wert . " SWS\n";
83 0 : $this->lehrformen .= "[/list]";
84 :
85 0 : foreach ($modul->modulinhalt->voraussetzung as $name)
86 0 : foreach ($modul->modulinhalt->voraussetzung->children() as $name)
87 0 : $this->voraussetzungen .= $name["nr"] . ", ";
88 : // Falls vorhanden, abschließendes ", " entfernen
89 0 : if (strlen($this->voraussetzungen) > 0)
90 0 : $this->voraussetzungen = substr($this->voraussetzungen, 0, strlen($this->voraussetzungen) - 2); //Letztes Komma entfernen
91 : else
92 0 : $this->voraussetzungen = "n.a.";
93 :
94 0 : foreach ($modul->modulinhalt->kurzbeschr as $name)
95 0 : $this->kurzbeschreibung = $modul->modulinhalt->kurzbeschr[0];
96 :
97 :
98 : /* Lernziele */
99 0 : $lz_raw = $lernziel_raw->item(0)->nodeValue;
100 0 : $this->lernziele = "";
101 0 : $anz_auflistungen = 0;
102 :
103 0 : foreach ($modul->modulinhalt->lernziel[0]->children() as $name => $wert){
104 : /* Eine Auflistung */
105 0 : if ((string) $name === "ul")
106 0 : {
107 0 : $anz_auflistungen++;
108 : //var_dump($lz_raw);
109 : //$lz_raw = substr($lz_raw, 5); // TEST Leerzeichen entfernen
110 : //var_dump($lz_raw);
111 0 : $this->lernziele .= "[list]"; // BB-Code
112 :
113 0 : foreach ($wert as $aufz => $inhalt){ //aufz = Auzählung
114 0 : $inhalt = (string)$inhalt;
115 :
116 : //if ($this->modulkuerzel == "ba1001"){ echo "<br>ERSTERBuchstabe:";var_dump(substr($lz_raw, 0, 1));}
117 :
118 : // Steuerzeichen vor Inhalt entfernen
119 0 : while (1<strlen($lz_raw)) {
120 0 : $zeichen = substr($lz_raw, 0, 1);
121 0 : if ( ($zeichen == "\t") || ($zeichen == " ") || ($zeichen == "\r") || ($zeichen == "\n") )
122 0 : $lz_raw = substr($lz_raw, 1);
123 : else
124 0 : break;
125 0 : }
126 : // if ($this->modulkuerzel == "ba1001"){ echo "<br>ERSTERBuchstabe:";var_dump(substr($lz_raw, 0, 1));}
127 :
128 :
129 : //if ($this->modulkuerzel == "ba1001"){ echo "<br>VORVERGLEICHlerninhalt_raw";var_dump(substr($lz_raw, 0, strlen($inhalt)));echo "<br>VORVERGLEICHlerninhalt";var_dump($inhalt);}
130 : //Gucken, ob vor der Aufzählung noch Text steht
131 0 : if ( substr($lz_raw, 0, strlen($inhalt)) != $inhalt ){
132 : //if ($this->modulkuerzel == "ba1001"){echo "<br>INNHALT AM BEGIN";var_dump($lz_raw);}
133 : // Den dazwischenhängenden Satz vor die Aufzählung schreiben
134 0 : if ($anz_auflistungen > 0)
135 0 : $this->lernziele = substr($this->lernziele, 0, strlen($this->lernziele)-strlen("[list]")).substr($lz_raw, 0, strpos($lz_raw, $inhalt))."[list][*]".$inhalt;
136 : else
137 0 : $this->lernziele = substr($lz_raw, 0, strpos($lz_raw, $inhalt)).$this->lernziele.$inhalt."[list][*]";
138 0 : }
139 : else
140 0 : $this->lernziele .= "[*]" . $inhalt;
141 :
142 : //if ($this->modulkuerzel == "ba1001"){ echo "<br>lerninhalt_raw";var_dump($lz_raw);echo "<br>INHALT";var_dump($inhalt);echo "<br>strpos";var_dump(strpos($lz_raw, $inhalt));echo "<br>strlen";var_dump(strlen($inhalt));}
143 : // Den Teil von $this->lerninhalt aus $lz_raw löschen, der bereits in $this->lerninhalt gespeichert wurde
144 0 : $lz_raw = substr($lz_raw, strpos($lz_raw, $inhalt)+strlen($inhalt));
145 :
146 :
147 0 : }
148 :
149 0 : $this->lernziele .= "[/list]";
150 0 : }
151 : /* Nur ein Element */
152 : else{
153 : /* $lernziele_raw = $dom->getElementsByTagName('lerninhalt');
154 : $wert = $lerninhalt_raw->item($anz_auflistungen-1)->nodeValue;
155 : $this->lerninhalt .= $wert;*/
156 0 : $this->lernziele = $lerninhalt_raw->item(0)->nodeValue;
157 : }
158 0 : if ($this->modulkuerzel == "cs2003"){ echo "<br>lernziele";var_dump($this->lernziele);}
159 0 : }
160 :
161 :
162 : /* Lerninhalt */
163 0 : $li_raw = $lerninhalt_raw->item(0)->nodeValue;
164 0 : $this->lerninhalt = "";
165 0 : $anz_auflistungen = 0;
166 :
167 0 : foreach ($modul->modulinhalt->lerninhalt[0]->children() as $name => $wert){
168 : /* Eine Auflistung */
169 0 : if ((string) $name === "ul")
170 0 : {
171 0 : $anz_auflistungen++;
172 : //var_dump($li_raw);
173 : //$li_raw = substr($li_raw, 5); // TEST Leerzeichen entfernen
174 : //var_dump($li_raw);
175 0 : $this->lerninhalt .= "[list]"; // BB-Code
176 :
177 0 : foreach ($wert as $aufz => $inhalt){ //aufz = Auzählung
178 0 : $inhalt = (string)$inhalt;
179 :
180 : //if ($this->modulkuerzel == "ba1001"){ echo "<br>ERSTERBuchstabe:";var_dump(substr($li_raw, 0, 1));}
181 :
182 : // Steuerzeichen vor Inhalt entfernen
183 0 : while (1<strlen($li_raw)) {
184 0 : $zeichen = substr($li_raw, 0, 1);
185 0 : if ( ($zeichen == "\t") || ($zeichen == " ") || ($zeichen == "\r") || ($zeichen == "\n") )
186 0 : $li_raw = substr($li_raw, 1);
187 : else
188 0 : break;
189 0 : }
190 : // if ($this->modulkuerzel == "ba1001"){ echo "<br>ERSTERBuchstabe:";var_dump(substr($li_raw, 0, 1));}
191 :
192 :
193 : //if ($this->modulkuerzel == "ba1001"){ echo "<br>VORVERGLEICHlerninhalt_raw";var_dump(substr($li_raw, 0, strlen($inhalt)));echo "<br>VORVERGLEICHlerninhalt";var_dump($inhalt);}
194 : //Gucken, ob vor der Aufzählung noch Text steht
195 0 : if ( substr($li_raw, 0, strlen($inhalt)) != $inhalt ){
196 : //if ($this->modulkuerzel == "ba1001"){echo "<br>INNHALT AM BEGIN";var_dump($li_raw);}
197 : // Den dazwischenhängenden Satz vor die Aufzählung schreiben
198 0 : if ($anz_auflistungen > 0)
199 0 : $this->lerninhalt = substr($this->lerninhalt, 0, strlen($this->lerninhalt)-strlen("[list]")).substr($li_raw, 0, strpos($li_raw, $inhalt))."[list][*]".$inhalt;
200 : else
201 0 : $this->lerninhalt = substr($li_raw, 0, strpos($li_raw, $inhalt)).$this->lerninhalt.$inhalt."[list][*]";
202 0 : }
203 : else
204 0 : $this->lerninhalt .= "[*]" . $inhalt;
205 :
206 : //if ($this->modulkuerzel == "ba1001"){ echo "<br>lerninhalt_raw";var_dump($li_raw);echo "<br>INHALT";var_dump($inhalt);echo "<br>strpos";var_dump(strpos($li_raw, $inhalt));echo "<br>strlen";var_dump(strlen($inhalt));}
207 : // Den Teil von $this->lerninhalt aus $li_raw löschen, der bereits in $this->lerninhalt gespeichert wurde
208 0 : $li_raw = substr($li_raw, strpos($li_raw, $inhalt)+strlen($inhalt));
209 :
210 :
211 0 : }
212 :
213 0 : $this->lerninhalt .= "[/list]";
214 0 : }
215 : /* Nur ein Element */
216 : else{
217 0 : $lerninhalt_raw = $dom->getElementsByTagName('lerninhalt');
218 : /* $wert = $lerninhalt_raw->item($anz_auflistungen-1)->nodeValue;
219 : $this->lerninhalt .= $wert;*/
220 0 : if ($this->modulkuerzel == "cs3001"){ echo "<br>lerninhalt";var_dump($lerninhalt_raw);var_dump($name);}
221 :
222 : }
223 0 : }
224 :
225 : //if ($this->modulkuerzel == "ba1001"){ echo "<br>lerninhalt am ende";var_dump($this->lerninhalt);}
226 : /* /Lerninhalt */
227 0 : if ($this->modulkuerzel == "cs3001"){ echo "<br>lerninhalt";var_dump($lerninhalt_raw);var_dump($name);}
228 :
229 :
230 0 : $buch_idx = -1;
231 0 : $this->literatur = "[list]"; //BB-Code
232 0 : foreach ($modul->modulinhalt->litverz->children() as $name => $wert) {
233 0 : $buch_idx++;
234 0 : $this->literatur .= "[*]"; //Neues Buch
235 0 : foreach ($modul->modulinhalt->litverz->lit[$buch_idx]->children() as $aufz => $inhalt) //aufz = Auzählung
236 0 : $this->literatur .= $inhalt . ", ";
237 : // Falls vorhanden, abschließendes ", " entfernen
238 0 : if ( strrpos ( $this->literatur, ",") === strlen($this->literatur)-2)
239 0 : $this->literatur = substr($this->literatur, 0, strlen($this->literatur)-2);
240 0 : }
241 0 : $this->literatur .= "[/list]";
242 :
243 0 : }
244 :
245 0 : $this->remove_steuerzeichen();
246 :
247 : // echo $this->modulkuerzel . "<br>";
248 : // echo $this->creditpoints."<br>";
249 : // echo $this->modultitel."<br>";
250 : // echo $this->lehrformen."<br>";
251 : // echo $this->voraussetzungen . "<br>";
252 : // echo $this->lernziele."<br>";
253 : // echo $this->kurzbeschreibung."<br>";
254 : // echo $this->studiengang . "<br>";
255 : // echo $this->lerninhalt."<br>";
256 : // echo $this->modultyp."<br>";
257 : // echo $this->literatur . "<br>";
258 :
259 0 : }
260 :
261 : function remove_steuerzeichen()
262 : {
263 0 : $steuerzeichen = array('/\r/', '/\t/', '/\n/', '/\v/');
264 0 : $ersetzungen = array("","","","");
265 0 : $this->modultitel = preg_replace($steuerzeichen,$ersetzungen,$this->modultitel); //Steuerzeichen entfernen
266 0 : $this->lernziele = preg_replace($steuerzeichen,$ersetzungen,$this->lernziele); //Steuerzeichen entfernen
267 0 : $this->lerninhalt = preg_replace($steuerzeichen,$ersetzungen,$this->lerninhalt); //Steuerzeichen entfernen
268 0 : $this->lehrformen = preg_replace($steuerzeichen,$ersetzungen,$this->lehrformen); //Steuerzeichen entfernen
269 0 : $this->literatur = preg_replace($steuerzeichen,$ersetzungen,$this->literatur); //Steuerzeichen entfernen
270 0 : }
271 :
272 : function get_studiengang_name()
273 : {
274 0 : $sgang_namen = explode(", ", $this->studiengang);
275 0 : $sgang_zus = "";
276 0 : foreach ($sgang_namen as $sgang_name){
277 : switch ($sgang_name){
278 0 : case "bi":
279 0 : $sgang_zus = "Informatik (Bchl.)";
280 0 : break;
281 0 : case "bmi":
282 0 : $sgang_zus .= "Informatik-Medizin (Bachelor)";
283 0 : break;
284 0 : case "mi":
285 0 : $sgang_zus .= "Informatik (Master)";
286 0 : break;
287 0 : case "bwi":
288 0 : $sgang_zus .= "Informatik-Betriebswissenschaft (Bchl.)";
289 0 : break;
290 0 : case "mmi":
291 0 : $sgang_zus .= "Informatik-Medizin (Master)";
292 0 : break;
293 0 : case "mwi":
294 0 : $sgang_zus .= "Informatik-Betriebswissenschaft (Master)";
295 0 : break;
296 0 : case "bti":
297 0 : $sgang_zus .= "bti"; // Was bedeutet bti?
298 0 : break;
299 0 : default:
300 0 : $sgang_zus .= "$sgang_name";
301 0 : break;
302 0 : }
303 0 : $sgang_zus .= ", ";
304 0 : }
305 :
306 0 : return substr($sgang_zus, 0, strlen($sgang_zus)-2);
307 : }
308 :
309 : function get_voraussetzungen_verlinkt($link_anfang, $link_end)
310 : {
311 : $alle_voraussetzungen;
312 : $link_vor;
313 :
314 : // Voraussetzungen aufs Modul-Handbuch verlinken
315 0 : if ($this->voraussetzungen != ""){
316 0 : $alle_voraussetzungen = explode(", ", Data::toHTML($this->voraussetzungen));
317 0 : $link_vor = "";
318 0 : foreach ($alle_voraussetzungen as $voraussetzung)
319 0 : $link_vor .= "<a href=".$link_anfang.$voraussetzung.$link_end.">".$voraussetzung.", </a>";
320 :
321 : //Letztes Komma entfernen
322 0 : $link_vor = substr($link_vor, 0, strlen($link_vor) - 6);
323 0 : $link_vor .= "</a>";
324 :
325 0 : }
326 : else
327 0 : $link_vor = "Keine Voraussetzungen erforderlich";
328 :
329 0 : return $link_vor;
330 : }
331 :
332 :
333 : }
|